查看原文
其他

Alt-Tab Terminator注册算法逆向

0xEEEE 看雪学苑 2024-07-16

逆向这个软件的注册算法很容易,但貌似这个算法是不可逆的,分享出来看看大家的思路。





定位注册算法


这个程序开着aslr呢, 先用CFF Explorer抹去dll can move属性。


用了mfc写的程序, 用xspy定位到关键函数:


其中id=03fa是序列号那个edit的文本内容被改变事件, id=03fc是'浏览许可证文件'被单击事件。

显然分析id=03fc比较方便(这俩事件最终调用的是同一验证函数)。




分析'浏览许可证文件'


首先弹出个ModalDialog 选择文件:


然后读取文件内容:



读取的时候会判断文件编码, 普通文本文件就直接读了, 会根据换行分割, 获取name和key。

然后进入验证函数sub_14000F820



其中MultiByteStr就是'名称', v55就是'序列号', v34, v33没有用到。




逆向验证函数


总的来说, 这个函数分两部分, 首先把name大写后进行魔改的rc4加密, 然后把key进行某种自定义的算法, 然后把两个加密后的值进行某种比较, 其中两部分的前5个字节要相等.


3.1 把name进行魔改RC4加密


①首先把name大写后赋值给uint8_t name_upper[256]数组 (这个数组存放魔改RC4加密后的结果):



其中函数开头的sub_14000F670函数是在进行字符串映射:


这串字符串就是key的有效字符, 比如'3'在字符串中的位置是1, 则g_ci_map['3'] = 1

②然后进行RC4初始化, 下面在初始化S盒和密钥(下图中的byte_140400FC0就是s盒, xor_bytes就密钥):


只不过编译时内联了, 其实应该是先产生密钥, 再rc4_init, 汇编层面放到了同一个循环里。

③然后进行256轮魔改RC4加密:



然后name加密就到底结束, 然后进行key的加密。

3.2 把key进行自定义算法加密




这个算法有点冗杂, 这里就不展示了, 可以直接看附件整理好的。

3.3 验证两部分加密结果


name加密结果和key加密结果的前5个字节要相等, 第六个字节要满足下面的条件:






疑问


这样的验证逻辑, 貌似没法通过name推出key, 或者通过key推出name?

那作者是怎么产生注册码的呢?




看雪ID:0xEEEE

https://bbs.kanxue.com/user-home-901761.htm

*本文为看雪论坛优秀文章,由 0xEEEE 原创,转载请注明来自看雪社区



# 往期推荐

1、恶意木马历险记

2、VMP源码分析:反调试与绕过方法

3、Chrome V8 issue 1486342浅析

4、Cython逆向-语言特性分析

5、Boofuzz在二进制IOT漏洞挖掘中的简单运用



球分享

球点赞

球在看



点击阅读原文查看更多

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存